home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
C++
/
Applications
/
Mic-1 v1.0
/
Project and Source
/
Source
/
mic_control.h
< prev
next >
Wrap
Text File
|
1996-05-15
|
3KB
|
111 lines
#ifndef _MIC_CONTROL_
#define _MIC_CONTROL_
#include "mic_main.h"
//extern class Mic_1_Class;
class MMUXClass;
class ControlStoreClass;
class MPCClass;
class IncrementerClass;
class MIRClass;
class MicroSeqClass;
// the microprogram multiplexer; determines jump location in the microprogram
class MMUXClass
{
private:
short Jump;
unsigned short Incrementer_word;
unsigned short Address_word;
public:
MMUXClass() {Jump = 0; Incrementer_word = 0; Address_word = 0;}
void input_MicroSeq(Mic_1_Class& Mic, short newJump) {Jump = newJump; output(Mic);}
void input_Incrementer(Mic_1_Class& Mic, unsigned short new_Inc_word)
{
Incrementer_word = new_Inc_word;
if (!Jump)
output(Mic);
}
void input_MIR(Mic_1_Class& Mic, unsigned short new_Addr_word)
{
Address_word = new_Addr_word;
if (Jump)
output(Mic);
}
void output(Mic_1_Class& Mic);
friend ostream& operator << (ostream& s, MMUXClass& m);
};
// The microprogram counter
class MPCClass
{
private:
unsigned short word;
public:
MPCClass() {word = 0;}
void input_MMUX (unsigned short newWord) {word = newWord;}
void output (Mic_1_Class& Mic);
friend ostream& operator << (ostream& s, MPCClass& m);
};
class IncrementerClass
{
private:
unsigned short word;
public:
IncrementerClass() {word = 0;}
void input_MPC (Mic_1_Class& Mic, unsigned short newWord) {word = newWord; output(Mic);}
void output(Mic_1_Class& Mic);
};
class ControlStoreClass
{
private:
short Index;
unsigned long store[256];
public:
ControlStoreClass() {Index = 0; for (int i=0; i<256; i++) store[i]=0;}
unsigned long getNthWord (short n);
Boolean putNthWord (short n, unsigned long newWord);
void input_MPC (Mic_1_Class& Mic, short which)
{
Index = which;
output(Mic);
}
void output(Mic_1_Class& Mic);
friend ostream& operator << (ostream& s, ControlStoreClass& c);
friend istream& operator >> (istream& s, ControlStoreClass& c);
};
short InitMicControl (Mic_1_Class& Mic);
class MIRClass
{
private:
unsigned long MIR;
public:
MIRClass () {MIR = 0;}
unsigned long getMIR (void) {return MIR;}
void putMIR (unsigned long newMIR) {MIR = newMIR;}
void input_ControlStore (unsigned long newMIR) {MIR = newMIR;}
void output (Mic_1_Class& Mic);
friend ostream& operator << (ostream& s, MIRClass& m);
};
class MicroSeqClass
{
private:
short zero;
short negative;
short jump_cond;
public:
MicroSeqClass() {zero = negative = false; jump_cond = 0;}
void input_negative(short newNegative) {negative = newNegative;}
// input_negative must be called before input_zero
void input_zero (Mic_1_Class& Mic, short newZero) {zero = newZero; output(Mic);}
void input_MIR (short new_jump_cond) {jump_cond = new_jump_cond;}
void output(Mic_1_Class& Mic);
friend ostream& operator << (ostream& s, MicroSeqClass& m);
};
#endif